package com.snj.suiji;

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;

public class RandomDecimal {

    public static void main(String[] args) {
//        // 示例调用
//        BigDecimal inputNumber = new BigDecimal("1.3 * 10");

        BigDecimal baseNumber1 = new BigDecimal("2.2");
        BigDecimal baseNumber2 = new BigDecimal("0.651");

        BigDecimal multiplier = new BigDecimal("32.4");

        BigDecimal inputNumber1 = calculateInputNumber(baseNumber1, multiplier);
        List<BigDecimal> randomNumbers1 = generateRandomDecimals(inputNumber1, 1);
        randomNumbers1.forEach(System.out::println);

        System.out.println("------------------------------------------");

        BigDecimal inputNumber2 = calculateInputNumber(baseNumber2, multiplier);
        List<BigDecimal> randomNumbers2 = generateRandomDecimals(inputNumber2, 1);
        randomNumbers2.forEach(System.out::println);
    }

    // 计算 inputNumber 的方法
    public static BigDecimal calculateInputNumber(BigDecimal baseNumber, BigDecimal multiplier) {
        return baseNumber.multiply(multiplier);
    }

    /**
     * 生成10个随机小数，范围在输入数的±5%之间，保留三位小数
     *
     * @param inputNumber 输入的小数
     * @return 包含10个随机小数的数组
     */
    public static List<BigDecimal> generateRandomDecimals(BigDecimal inputNumber, Integer size) {
        // 计算范围
        // 下限：输入数的95%
        BigDecimal lowerBound = inputNumber.multiply(new BigDecimal("0.95"));
        // 上限：输入数的105%
        BigDecimal upperBound = inputNumber.multiply(new BigDecimal("1.05"));

        // 生成10个随机小数
        Random random = new Random();
        List<BigDecimal> list = new ArrayList<>();
        for (int i = 0; i < size; i++) {
            // 生成随机小数
            double randomValue = lowerBound.doubleValue() +
                    (upperBound.doubleValue() - lowerBound.doubleValue()) * random.nextDouble();
            // 保留三位小数
            BigDecimal randomNumber = new BigDecimal(randomValue).setScale(3, RoundingMode.HALF_UP);
            list.add(randomNumber);
        }

        return list;
    }

    public static List<BigDecimal> generateRandomDecimals2(BigDecimal inputNumber, Integer size) {
        // 计算范围
        // 下限：输入数的95%
        BigDecimal lowerBound = inputNumber.multiply(new BigDecimal("0.95"));
        // 上限：输入数的105%
        BigDecimal upperBound = inputNumber.multiply(new BigDecimal("1.05"));

        // 生成10个随机小数
        Random random = new Random();
        List<BigDecimal> list = new ArrayList<>();
        for (int i = 0; i < size; i++) {
            // 生成随机小数
            double randomValue = lowerBound.doubleValue() +
                    (upperBound.doubleValue() - lowerBound.doubleValue()) * random.nextDouble();
            // 保留三位小数
            BigDecimal randomNumber = new BigDecimal(randomValue).setScale(3, RoundingMode.HALF_UP);
            list.add(randomNumber);
        }

        return list;
    }
}